#ScriptVersion[2]

script_enemy_main {

	//	Ǝ̉bgpAPXNvgł
	//	GtFNgIuWFNg𑽗lĂ܂

	let Current=GetCurrentScriptDirectory;

	let Chat_IMG = Current~"IMG\CHAT.png";				//	bɕ\镶̉摜
	let Chat_Back_IMG = Current ~ "IMG\front00.png";		//	b̔wi
	let IMG=Current~"Dot\dot_aya.png";				//	G̉摜
	let Spell_Name_IMG = Current ~ "IMG\Spell_Name.png";		//	Xyl[̉摜
	let BG_IMG = Current ~ "IMG\bg_j_a.png";			//	Xy̔wi
	let BG_Add_X = 0;						//	Xy̔wip
	let Shot_SE = Current ~ "..\SE\shot00.wav";			//	Vbg̉
	let Player_Face_IMG = "";					//	b̃vC[̕\i摜j@Kvȕǉ
	let Enemy_Face_IMG = "";					//	b̓G̕\i摜j@Kvȕǉ

	@Initialize {
		LoadGraphic(Chat_IMG);					//	b摜̓ǂݍ
		LoadGraphic(Chat_Back_IMG);				//	bwi̓ǂݍ
		LoadGraphic(IMG);					//	G摜̓ǂݍ
		LoadGraphic(Spell_Name_IMG);				//	Xyl[摜̓ǂݍ
		LoadGraphic(BG_IMG);					//	Xywi摜̓ǂݍ
		LoadSE(Shot_SE);					//	Vbg̓ǂݍ
		SetX(-100);						//	wʒu
		SetY(-100);						//	xʒu
		SetLife(1);						//	G̗
		Draw_Aya(IMG,7,5,5,0);					//	i̐lfunctioniG̕`pj
		LoadUserShotData(Current~"IMG\shot_All.txt");		//	e摜̓ǂݍ
		TMain;
	}

	@MainLoop {
		ForbidShot(IsForbidShot);				//	b/퓬ŃVbg֎~邩邩
		ForbidBomb(IsForbidBomb);				//	b/퓬Ń{֎~邩邩
		SetCollisionA(Draw_X, Draw_Y, 24);			//	蔻`ii̐lfunctionj
		SetCollisionB(Draw_X, Draw_Y, 24);			//	蔻aii̐lfunctionj
		yield;
	}

	@DrawLoop {
		DrawGraphic(Draw_X,Draw_Y);				//	i̐lfunctioniG̕`j
	}

	@Finalize {
		SetCommonData("X",GetX);				//	i̐lʃf[^
		SetCommonData("Y",GetY);				//	i̐lʃf[^
		SetCommonData("SPELL_SCORE",Spell_Score);		//	i̐lʃf[^
	}

	task TMain {
		yield;
		SetInvincibility(400);					//	G
		Start_Chat;
	}

	task Start_Chat{
		Face_Work;						//	b̃vC[EG̕\ύX
		Chat_Work(Chat_IMG, 0, 22);				//	b̕\
		
		SetInvincibility(400);					//	G
		SetBossLife(3000,E_TYPE,0,0,EM_SEIREN,0);		//	oĂGGȂ̂ŁA̗̓Q[W\ă{Xۂ
		Draw_Name(NAME_IMG,Enemy_Aya,0);			//	G̖O\
		loop(30){ yield; }					//	ƊԂ
		Motion_Check = Attack_Motion_Spell;			//	i̐lϐւ
		Cut_In(TIREI, "", 0, 0, 0, 0);				//	JbgC\i厖ȎłAoĂĂG͎Głj
		SetSpellScore(1500000, 45, "_u_؂̗tBv", 0, 0, NORMAL_SPELL);	//	XyXRA̐ݒix܂ǁAoĂĂG͎Głj

		DrawSpellBack;						//	Xy̔wi`
		Back_Effect;						//	Xy̓Gt߂̔wiɂ傤ɂ
		Back_Add_Work;						//	Xy̔wi

		Start_Shot;						//	UiejJn
	}


	//	vC[EG̕\ω܂
	//	(\pX, Left, Top, Right, Bottom);ŕω܂
	task Face_Work{
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);		//	vC[̕\ω܂@łɁA̕`FςAvC[̉摜ł΂܂
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);		//	G̕\ω܂@łɁA̕`FςAG̉摜ł΂܂
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Enemy_Move;						//	bɓG̈ړ̑̏荞܂܂
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Player(Player_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
		Cange_Face_Enemy(Enemy_Face_IMG, 0, 0, 0, 0);
	}


	//	b̓G̍s
	task Enemy_Move{
		SetMovePosition03(GetCenterX,GetClipMinY+112,20,10);		//	GړĂ܂
		while(GetSpeedX){ yield; }					//	ړI܂őҋ@܂
		Draw_Boss_Circle(Current~"IMG\circle_m.png", 0, 0, 128, 128);	//	Ǧɖw܂
	}


	//	UJn
	task Start_Shot{
		loop(60){ yield; }
		Motion_Check = Default_Motion;
		loop(180){ yield; }
		let way=16;let angle=360/way;let base_angle=angle/2;
		loop{
			Motion_Check = Attack_Motion_A;
			loop(12){
				PlaySE(Shot_SE);
				ascent(j in 0..way){
					ascent(i in 0..2){
						Obj_Shot(GetX, GetY, 3, 2, angle * j + base_angle, [2, -2][i], [4, -4][i], 55, 57, [44, 45][i]);
					}
				}
				loop(5){ yield; }
			}
			Motion_Check = Default_Motion;
			loop(180){ yield; }
		}
	}

	task Obj_Shot(let Set_X, let Set_Y, let Set_Speed, let End_Speed, let Set_Angle, let Add_Angle_A, let Add_Angle_B, let Set_Frame_A, let SetFrame_B, let Color){
		CreateShotA(0, Set_X, Set_Y, 10);
		SetShotDataA(0, 0, Set_Speed, Set_Angle, Add_Angle_A, 0, 0, Color);
		SetShotDataA(0, Set_Frame_A, Set_Speed, NULL, Add_Angle_B, 0, 0, Color);
		SetShotDataA(0, Set_Frame_A + SetFrame_B, End_Speed, NULL, rand_int(-3, 3), 0, 0, Color);
		SetShotDataA(0, Set_Frame_A + SetFrame_B + 1, End_Speed, NULL, 0, 0, 0, Color);
		FireShot(0);
	}


	//	ȉAXy̔wił
	task Back_Add_Work{
		loop{
			BG_Add_X += 2;
			if(BG_Add_X >= 390){ BG_Add_X -= 390; }
			yield;
		}
	}

	task DrawSpellBack{
		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetRenderState(obj,ALPHA);
		ObjEffect_SetTexture(obj,BG_IMG);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj,4);
		Obj_SetSpeed(obj,0);
		Obj_SetAngle(obj,0);
		Obj_SetAlpha(obj,255);
		ObjEffect_SetLayer(obj,0);
		let wh=[0,0,384,448];
		let xy=Cal_XY(wh[0],wh[1],wh[2],wh[3]);
		let uv=Cal_UV(wh[0],wh[1],wh[2],wh[3]);
		ascent(vertex_number in 0..4){
			ObjEffect_SetVertexXY(obj,vertex_number,xy[vertex_number],xy[vertex_number+4]);
			ObjEffect_SetVertexUV(obj,vertex_number,uv[vertex_number],uv[vertex_number+4]);
		}
		Obj_SetPosition(obj,GetCenterX,GetCenterY);
		ascent(i in 1..31){
			ascent(vertex_number in 0..4){
				ObjEffect_SetVertexUV(obj,vertex_number,uv[vertex_number] + BG_Add_X,uv[vertex_number+4]);
				ObjEffect_SetVertexColor(obj,vertex_number,(255/30)*i,255,255,255);
			}
			yield;
		}
		loop{
			ascent(vertex_number in 0..4){
				ObjEffect_SetVertexUV(obj,vertex_number,uv[vertex_number] + BG_Add_X,uv[vertex_number+4]);
			}
			yield;
		}
	}

	task Back_Effect{
		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,BG_IMG);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_CreateVertex(obj,194);
		ObjEffect_SetLayer(obj,0);
		let Radius_A = [[0,30],[30,70],[70,110],[110,150]];
		let Radius_B = [[0,30],[30,70],[70,110],[110,150]];
		let Set_Radius_A;
		let Set_Radius_B;
		let Vertex_Angle=0;
		let Default_Vertex_Angle=360/47;
		let Set_Vertex_Angle=0;
		let Angle_A=0;
		let Angle_B=0;
		let Angle_C=0;
		let Pace_A=15;
		let Pace_B=10;
		let Pace_C=20;
		ascent(i in 1..31){
			ascent(Vertex in 0..194){
				if(Vertex < 48){
					Set_Radius_A = [Radius_A[0][0],Radius_A[0][1]];
					Set_Radius_B = [Radius_B[0][0],Radius_B[0][1]-Pace_A*cos(Angle_A)];
				}else if(Vertex >= 48 && Vertex < 96){
					Set_Radius_A = [Radius_A[1][0],Radius_A[1][1]];
					Set_Radius_B = [Radius_B[1][0]-Pace_A*cos(Angle_A),Radius_B[1][1]-Pace_B*cos(Angle_B)];
				}else if(Vertex >= 96 && Vertex < 144){
					Set_Radius_A = [Radius_A[2][0],Radius_A[2][1]];
					Set_Radius_B = [Radius_B[2][0]-Pace_B*cos(Angle_B),Radius_B[2][1]-Pace_C*cos(Angle_C)];
				}else{
					Set_Radius_A = [Radius_A[3][0],Radius_A[3][1]];
					Set_Radius_B = [Radius_B[3][0]-Pace_C*cos(Angle_C),Radius_B[3][1]];
				}
				Set_Vertex_Angle=Default_Vertex_Angle*Vertex+Vertex_Angle;
				ObjEffect_SetVertexXY(obj,Vertex,Draw_X+Set_Radius_A[Vertex%2]*cos(Set_Vertex_Angle),Draw_Y+Set_Radius_A[Vertex%2]*sin(Set_Vertex_Angle));
				ObjEffect_SetVertexUV(obj,Vertex,Draw_X+Set_Radius_B[Vertex%2]*cos(Set_Vertex_Angle)-GetClipMinX + BG_Add_X,Draw_Y+Set_Radius_B[Vertex%2]*sin(Set_Vertex_Angle)-GetClipMinY);
				ObjEffect_SetVertexColor(obj,Vertex,(255/30)*i,175,175,175);
			}
			Angle_A+=rand_int(3,7);
			if(Angle_A>=360){Angle_A-=360;}
			Angle_B+=rand_int(3,7);
			if(Angle_B>=360){Angle_B-=360;}
			Angle_C+=rand_int(3,7);
			if(Angle_C>=360){Angle_C-=360;}
			yield;
		}
		loop{
			ascent(Vertex in 0..194){
				if(Vertex < 48){
					Set_Radius_A = [Radius_A[0][0],Radius_A[0][1]];
					Set_Radius_B = [Radius_B[0][0],Radius_B[0][1]-Pace_A*cos(Angle_A)];
				}else if(Vertex >= 48 && Vertex < 96){
					Set_Radius_A = [Radius_A[1][0],Radius_A[1][1]];
					Set_Radius_B = [Radius_B[1][0]-Pace_A*cos(Angle_A),Radius_B[1][1]-Pace_B*cos(Angle_B)];
				}else if(Vertex >= 96 && Vertex < 144){
					Set_Radius_A = [Radius_A[2][0],Radius_A[2][1]];
					Set_Radius_B = [Radius_B[2][0]-Pace_B*cos(Angle_B),Radius_B[2][1]-Pace_C*cos(Angle_C)];
				}else{
					Set_Radius_A = [Radius_A[3][0],Radius_A[3][1]];
					Set_Radius_B = [Radius_B[3][0]-Pace_C*cos(Angle_C),Radius_B[3][1]];
				}
				Set_Vertex_Angle=Default_Vertex_Angle*Vertex+Vertex_Angle;
				ObjEffect_SetVertexXY(obj,Vertex,Draw_X+Set_Radius_A[Vertex%2]*cos(Set_Vertex_Angle),Draw_Y+Set_Radius_A[Vertex%2]*sin(Set_Vertex_Angle));
				ObjEffect_SetVertexUV(obj,Vertex,Draw_X+Set_Radius_B[Vertex%2]*cos(Set_Vertex_Angle)-GetClipMinX + BG_Add_X,Draw_Y+Set_Radius_B[Vertex%2]*sin(Set_Vertex_Angle)-GetClipMinY);
				ObjEffect_SetVertexColor(obj,Vertex,255,175,175,175);
			}
			Angle_A+=rand_int(3,7);
			if(Angle_A>=360){Angle_A-=360;}
			Angle_B+=rand_int(3,7);
			if(Angle_B>=360){Angle_B-=360;}
			Angle_C+=rand_int(3,7);
			if(Angle_C>=360){Angle_C-=360;}
			yield;
		}
	}

	#include_function".\INCLUDE\BOSS_INI.dms";
	#include_function".\DOT\Boss_Graphic.pad";

}